using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._MultidimensionTools
{
    /// <summary>
    /// <para>Manage Multidimensional Raster</para>
    /// <para>Edits a multidimensional raster by adding or deleting variables or dimensions.</para>
    /// <para>通过添加或删除变量或维度来编辑多维栅格。</para>
    /// </summary>    
    [DisplayName("Manage Multidimensional Raster")]
    public class ManageMultidimensionalRaster : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ManageMultidimensionalRaster()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_multidimensional_raster">
        /// <para>Target Multidimensional Raster</para>
        /// <para>The multidimensional raster in Cloud Raster Format (.crf) to modify.</para>
        /// <para>要修改的云栅格格式 （.crf） 的多维栅格。</para>
        /// </param>
        public ManageMultidimensionalRaster(object _target_multidimensional_raster)
        {
            this._target_multidimensional_raster = _target_multidimensional_raster;
        }
        public override string ToolboxName => "Multidimension Tools";

        public override string ToolName => "Manage Multidimensional Raster";

        public override string CallName => "md.ManageMultidimensionalRaster";

        public override List<string> AcceptEnvironments => ["parallelProcessingFactor"];

        public override object[] ParameterInfo => [_target_multidimensional_raster, _manage_mode.GetGPValue(), _variables, _in_multidimensional_rasters, _dimension_name, _dimension_value, _dimension_description, _dimension_unit, _update_statistics.GetGPValue(), _update_transpose.GetGPValue(), _updated_target_multidimensional_raster];

        /// <summary>
        /// <para>Target Multidimensional Raster</para>
        /// <para>The multidimensional raster in Cloud Raster Format (.crf) to modify.</para>
        /// <para>要修改的云栅格格式 （.crf） 的多维栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Multidimensional Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_multidimensional_raster { get; set; }


        /// <summary>
        /// <para>Manage Mode</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of modification that will be performed on the target raster.</para>
        ///   <bulletList>
        ///     <bullet_item>Add Dimension—A dimension will be added to the input multidimensional raster.</bullet_item><para/>
        ///     <bullet_item>Append Slices—Slices from the input multidimensional rasters will be added to the end of the slices for a dimension. This is the default.</bullet_item><para/>
        ///     <bullet_item>Append Variables—The variables from the input multidimensional rasters will be added.</bullet_item><para/>
        ///     <bullet_item>Replace Slices—Existing slices will be replaced by slices from another multidimensional raster, at specific dimension values.</bullet_item><para/>
        ///     <bullet_item>Delete Variables—One or more variables will be deleted from the multidimensional raster.</bullet_item><para/>
        ///     <bullet_item>Remove Dimension—A single slice multidimensional raster will be converted to a dimensionless raster.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将对目标栅格执行的修改类型。</para>
        ///   <bulletList>
        ///     <bullet_item>添加维度—将向输入多维栅格添加一个维度。</bullet_item><para/>
        ///     <bullet_item>追加切片—输入多维栅格中的切片将添加到维度的切片末尾。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>追加变量—将添加输入多维栅格中的变量。</bullet_item><para/>
        ///     <bullet_item>替换切片—现有切片将替换为来自另一个多维栅格的特定维度值的切片。</bullet_item><para/>
        ///     <bullet_item>删除变量—将从多维栅格中删除一个或多个变量。</bullet_item><para/>
        ///     <bullet_item>移除维度—单个切片多维栅格将转换为无量纲栅格。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Manage Mode")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _manage_mode_value _manage_mode { get; set; } = _manage_mode_value._APPEND_SLICES;

        public enum _manage_mode_value
        {
            /// <summary>
            /// <para>Append Slices</para>
            /// <para>Append Slices—Slices from the input multidimensional rasters will be added to the end of the slices for a dimension. This is the default.</para>
            /// <para>追加切片—输入多维栅格中的切片将添加到维度的切片末尾。这是默认设置。</para>
            /// </summary>
            [Description("Append Slices")]
            [GPEnumValue("APPEND_SLICES")]
            _APPEND_SLICES,

            /// <summary>
            /// <para>Replace Slices</para>
            /// <para>Replace Slices—Existing slices will be replaced by slices from another multidimensional raster, at specific dimension values.</para>
            /// <para>替换切片—现有切片将替换为来自另一个多维栅格的特定维度值的切片。</para>
            /// </summary>
            [Description("Replace Slices")]
            [GPEnumValue("REPLACE_SLICES")]
            _REPLACE_SLICES,

            /// <summary>
            /// <para>Append Variables</para>
            /// <para>Append Variables—The variables from the input multidimensional rasters will be added.</para>
            /// <para>追加变量—将添加输入多维栅格中的变量。</para>
            /// </summary>
            [Description("Append Variables")]
            [GPEnumValue("APPEND_VARIABLES")]
            _APPEND_VARIABLES,

            /// <summary>
            /// <para>Delete Variables</para>
            /// <para>Delete Variables—One or more variables will be deleted from the multidimensional raster.</para>
            /// <para>删除变量—将从多维栅格中删除一个或多个变量。</para>
            /// </summary>
            [Description("Delete Variables")]
            [GPEnumValue("DELETE_VARIABLES")]
            _DELETE_VARIABLES,

            /// <summary>
            /// <para>Add Dimension</para>
            /// <para>Add Dimension—A dimension will be added to the input multidimensional raster.</para>
            /// <para>添加维度—将向输入多维栅格添加一个维度。</para>
            /// </summary>
            [Description("Add Dimension")]
            [GPEnumValue("ADD_DIMENSION")]
            _ADD_DIMENSION,

            /// <summary>
            /// <para>Remove Dimension</para>
            /// <para>Remove Dimension—A single slice multidimensional raster will be converted to a dimensionless raster.</para>
            /// <para>移除维度—单个切片多维栅格将转换为无量纲栅格。</para>
            /// </summary>
            [Description("Remove Dimension")]
            [GPEnumValue("REMOVE_DIMENSION")]
            _REMOVE_DIMENSION,

        }

        /// <summary>
        /// <para>Variables</para>
        /// <para><xdoc>
        ///   <para>The variable or variables that will be modified in the target multidimensional raster. This parameter is required if the operation being performed is a modification of an existing variable.</para>
        ///   <para>If no variable is specified, the first variable in the target multidimensional raster will be modified.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将在目标多维栅格中修改的一个或多个变量。如果正在执行的操作是对现有变量的修改，则此参数是必需的。</para>
        ///   <para>如果未指定变量，则将修改目标多维栅格中的第一个变量。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Variables")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _variables { get; set; } = null;


        /// <summary>
        /// <para>Input Multidimensional Rasters</para>
        /// <para>The multidimensional raster datasets that contain the slices or variables to be added to the target multidimensional raster. This parameter is required when Manage Mode is set to Append Slices, Replace Slices, or Append Variables.</para>
        /// <para>包含要添加到目标多维栅格的切片或变量的多维栅格数据集。当“管理模式”设置为“追加切片”、“替换切片”或“追加变量”时，该参数是必需的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Multidimensional Rasters")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _in_multidimensional_rasters { get; set; } = null;


        /// <summary>
        /// <para>Dimension Name</para>
        /// <para>The name of the new dimension to be added to the raster properties. This parameter is required if Manage Mode is set to Add Dimension.</para>
        /// <para>要添加到栅格属性的新尺寸的名称。如果“管理模式”设置为“添加维度”，则此参数是必需的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Dimension Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _dimension_name { get; set; } = null;


        /// <summary>
        /// <para>Dimension Value</para>
        /// <para><xdoc>
        ///   <para>The value of the dimension to be added. The value can be a single value or a range of values. For a range of values, provide the minimum and maximum values separated by a comma. For example, for a new height dimension, enter 0,10 to generate a dimension in which the first slice contains information for the first 10 meters of height.</para>
        ///   <para>This parameter is required if Manage Mode is set to Add Dimension.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要添加的维度的值。该值可以是单个值，也可以是一系列值。对于值范围，请提供用逗号分隔的最小值和最大值。例如，对于新的高度维度，输入 0,10 以生成一个维度，其中第一个切片包含前 10 米高度的信息。</para>
        ///   <para>如果“管理模式”设置为“添加维度”，则此参数是必需的。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Dimension Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _dimension_value { get; set; } = null;


        /// <summary>
        /// <para>Dimension Description</para>
        /// <para>The description of the new dimension to be added to the raster properties for metadata purposes. This parameter is active if Manage Mode is set to Add Dimension.</para>
        /// <para>出于元数据目的，要添加到栅格属性中的新维度的描述。如果“管理模式”设置为“添加维度”，则此参数处于活动状态。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Dimension Description")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _dimension_description { get; set; } = null;


        /// <summary>
        /// <para>Dimension Unit</para>
        /// <para>The unit of the new dimension to be added to the raster properties for metadata purposes. This parameter is active if Manage Mode is set to Add Dimension.</para>
        /// <para>出于元数据目的，要添加到栅格属性的新维度的单位。如果“管理模式”设置为“添加维度”，则此参数处于活动状态。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Dimension Unit")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _dimension_unit { get; set; } = null;


        /// <summary>
        /// <para>Update Statistics</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the statistics will be recalculated for the multidimensional raster dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Statistics will be recalculated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Statistics will not be recalculated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为多维栅格数据集重新计算统计数据。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将重新计算统计数据。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—不会重新计算统计数据。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Statistics")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_statistics_value _update_statistics { get; set; } = _update_statistics_value._true;

        public enum _update_statistics_value
        {
            /// <summary>
            /// <para>UPDATE_STATISTICS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_STATISTICS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_UPDATE_STATISTICS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_UPDATE_STATISTICS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Update Transpose</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the transpose will be rebuilt for the multidimensional raster dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The transpose will be rebuilt. If no transpose exists, a new transpose will be built. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The transpose will not be rebuilt.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为多维栅格数据集重新构建转置。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将重建转置。如果不存在转置，则将构建新的转置。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会重建转置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Transpose")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_transpose_value _update_transpose { get; set; } = _update_transpose_value._true;

        public enum _update_transpose_value
        {
            /// <summary>
            /// <para>UPDATE_TRANSPOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_TRANSPOSE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_UPDATE_TRANSPOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_UPDATE_TRANSPOSE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Target Multidimensional Raster</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Multidimensional Raster")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_target_multidimensional_raster { get; set; }


        public ManageMultidimensionalRaster SetEnv(object parallelProcessingFactor = null)
        {
            base.SetEnv(parallelProcessingFactor: parallelProcessingFactor);
            return this;
        }

    }

}